import { LanguageService } from './language.service';
import { ConfigService } from '@nestjs/config';

async function bootstrap() {
  // 模拟 NestJS 应用启动和 LanguageUtils 实例化
  const mockConfigService = {
    get: (key: string, defaultValue: any) => {
      if (key === 'app.supportedLocales') return ['zh_CN', 'en_US'];
      if (key === 'app.defaultLanguage') return 'zh_CN';
      return defaultValue;
    },
  } as ConfigService;

  const languageService = new LanguageService(mockConfigService);
  // 模拟初始化，实际由 NestJS 模块管理
  // await languageService.initializeLanguagePacks(); 

  console.log('--- LanguageService 使用示例 ---');

  // 1. 获取通用API消息 (默认模块: common, 默认类型: api)
  const commonApiMessage = await languageService.getApiMessage('success');
  console.log(`通用API消息 (success): ${commonApiMessage}`); // 预期: 操作成功

  // 2. 获取通用字典数据 (默认模块: common, 类型: dict)
  const commonDictMessage = await languageService.getDictData('dict_user.status_on');
  console.log(`通用字典数据 (dict_user.status_on): ${commonDictMessage}`); // 预期: 正常

  // 3. 获取通用验证器消息 (默认模块: common, 类型: validate)
  const commonValidateMessage = await languageService.getValidateMessage('validate_user.username_require');
  console.log(`通用验证器消息 (validate_user.username_require): ${commonValidateMessage}`); // 预期: 账号必须填写

  // 4. 获取用户模块API消息 (模块: user, 类型: api)
  const userApiMessage = await languageService.getApiMessage('create_success', undefined, 'user');
  console.log(`用户API消息 (user.create_success): ${userApiMessage}`); // 预期: 用户创建成功

  // 5. 获取用户模块字典数据 (模块: user, 类型: dict)
  const userDictMessage = await languageService.getDictData('user_type.admin', undefined, 'user');
  console.log(`用户字典数据 (user.user_type.admin): ${userDictMessage}`); // 预期: 管理员

  // 6. 获取用户模块验证器消息 (模块: user, 类型: validate)
  const userValidateMessage = await languageService.getValidateMessage('email_format_error', undefined, 'user');
  console.log(`用户验证器消息 (user.email_format_error): ${userValidateMessage}`); // 预期: 邮箱格式不正确

  // 7. 获取带参数的消息
  const paramMessage = await languageService.getApiMessage('user_error', { name: '张三' });
  console.log(`带参数消息 (user_error): ${paramMessage}`); // 预期: 账号或密码错误 (如果user_error在common/api.json中)

  // 8. 批量获取消息
  const batchMessages = await languageService.getBatchMessages(['success', 'fail'], 'common', 'api');
  console.log('批量获取消息 (common.api):', batchMessages); // 预期: { success: '操作成功', fail: '操作失败' }

  // 9. 切换语言并获取消息
  languageService.setLanguage('en_US');
  const enApiMessage = await languageService.getApiMessage('success');
  console.log(`英文API消息 (success): ${enApiMessage}`); // 预期: Operation successful

  // 10. 重新加载语言包
  await languageService.reloadLanguagePack('zh_CN');
  const reloadedMessage = await languageService.getApiMessage('success');
  console.log(`重新加载后消息 (success): ${reloadedMessage}`); // 预期: 操作成功

  // 11. 场景化验证示例
  console.log('\n--- 场景化验证示例 ---');
  
  // 模拟用户数据
  const userData = {
    username: 'testuser',
    password: '123456',
    real_name: '测试用户',
    email: 'test@example.com',
  };

  // 验证添加场景
  console.log('添加场景验证数据:', userData);

  // 验证编辑场景
  console.log('编辑场景验证数据:', userData);

  // 12. 分组验证消息示例
  console.log('\n--- 分组验证消息示例 ---');
  
  const menuValidation = await languageService.getValidateMessage('validate_menu.menu_name_require');
  console.log('菜单验证消息:', menuValidation); // 预期: 菜单名称必须填写

  const roleValidation = await languageService.getValidateMessage('validate_role.role_name_require');
  console.log('角色验证消息:', roleValidation); // 预期: 角色名称必须填写

  const siteValidation = await languageService.getValidateMessage('validate_site.site_name_require');
  console.log('站点验证消息:', siteValidation); // 预期: 网站名称必须填写

  // 13. 字典数据示例
  console.log('\n--- 字典数据示例 ---');
  
  const appDict = await languageService.getDictData('dict_app.type_admin');
  console.log('应用类型字典:', appDict); // 预期: 平台管理端

  const menuDict = await languageService.getDictData('dict_menu.type_list');
  console.log('菜单类型字典:', menuDict); // 预期: 目录

  const payDict = await languageService.getDictData('dict_pay.type_wechatpay');
  console.log('支付类型字典:', payDict); // 预期: 微信支付

  // 14. 参数替换示例
  console.log('\n--- 参数替换示例 ---');
  
  const paramMessage1 = await languageService.getValidateMessage('common.minLength', { min: 6 });
  console.log('最小长度验证:', paramMessage1); // 预期: 长度不能少于6个字符

  const paramMessage2 = await languageService.getValidateMessage('common.maxLength', { max: 20 });
  console.log('最大长度验证:', paramMessage2); // 预期: 长度不能超过20个字符

  const paramMessage3 = await languageService.getValidateMessage('common.between', { min: 1, max: 100 });
  console.log('范围验证:', paramMessage3); // 预期: 必须在1到100之间
}

bootstrap();
